using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

public partial class OrdenesDevolucion : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        tb_fechaAgregar.Text = DateTime.Now.ToShortDateString().ToString();
        tb_nroFacturaAgregar.Focus();
        lb_fechaInvalida.Visible = false;
        lb_errorSeleccionarProductos.Visible = false;
        lb_error.Visible = false;
    }
    /*Metodos para Buscar Orden de Devolucion*/
    protected void buscarOrdenDevolucion(string tabla, string columna, string ingresado)
    {
        SqlDataSource_OrdenesDevolucion.SelectParameters.Clear();
        SqlDataSource_OrdenesDevolucion.SelectCommand = "select Ordenes_Devolucion.cod_orden_devolucion_compra, Ordenes_Devolucion.fecha as Fecha, Ordenes_Devolucion.cod_factura_compra, Facturas_Compras.nro_factura_compra as Nro_Factura, Ordenes_Devolucion.cod_proveedor, Proveedores.nombre_empresa as Proveedor FROM Ordenes_Devolucion JOIN Facturas_Compras ON (Ordenes_Devolucion.cod_factura_compra=Facturas_Compras.cod_factura_compra) JOIN Proveedores ON (Proveedores.cod_proveedor=Ordenes_Devolucion.cod_proveedor) WHERE " + tabla + ".[" + columna + "] like @" + columna;

        SqlDataSource_OrdenesDevolucion.SelectParameters.Add(columna, TypeCode.String, "%");
        SqlDataSource_OrdenesDevolucion.SelectParameters[columna].DefaultValue = ingresado + "%";
        gv_ordenDevolucion.DataBind();
    }
    protected void buscarFecha(string fecha)
    {
        Page.Validate("formatoFecha");
        if (Page.IsValid)
        {
            SqlDataSource_OrdenesDevolucion.SelectParameters.Clear();
            SqlDataSource_OrdenesDevolucion.SelectCommand = "select Ordenes_Devolucion.cod_orden_devolucion_compra, Ordenes_Devolucion.fecha as Fecha, Ordenes_Devolucion.cod_factura_compra, Facturas_Compras.nro_factura_compra as Nro_Factura, Ordenes_Devolucion.cod_proveedor, Proveedores.nombre_empresa as Proveedor FROM Ordenes_Devolucion JOIN Facturas_Compras ON (Ordenes_Devolucion.cod_factura_compra=Facturas_Compras.cod_factura_compra) JOIN Proveedores ON (Proveedores.cod_proveedor=Ordenes_Devolucion.cod_proveedor) " +
                "WHERE CONVERT(varchar,Ordenes_Devolucion.fecha,103) = CONVERT(varchar, @fecha ,103)";
            SqlDataSource_OrdenesDevolucion.SelectParameters.Add("fecha", TypeCode.DateTime, "%");
            SqlDataSource_OrdenesDevolucion.SelectParameters["fecha"].DefaultValue = fecha;
            gv_ordenDevolucion.DataBind();
        }
    }
    protected void mostrarTodasDevoluciones()
    {
         SqlDataSource_OrdenesDevolucion.SelectParameters.Clear();
         SqlDataSource_OrdenesDevolucion.SelectCommand = "select Ordenes_Devolucion.cod_orden_devolucion_compra, Ordenes_Devolucion.fecha as Fecha, Ordenes_Devolucion.cod_factura_compra, Facturas_Compras.nro_factura_compra as Nro_Factura, Ordenes_Devolucion.cod_proveedor, Proveedores.nombre_empresa as Proveedor FROM Ordenes_Devolucion JOIN Facturas_Compras ON (Ordenes_Devolucion.cod_factura_compra=Facturas_Compras.cod_factura_compra) JOIN Proveedores ON (Proveedores.cod_proveedor=Ordenes_Devolucion.cod_proveedor)";
         gv_ordenDevolucion.DataBind();
    }
    protected void buscarOrden()
    {
        if (tb_nroFacturaBuscar.Text != string.Empty)
        {
            buscarOrdenDevolucion("Facturas_Compras", "nro_factura_compra", tb_nroFacturaBuscar.Text);
        }
        if (tb_proveedorBuscar.Text != string.Empty) 
        {
            buscarOrdenDevolucion("Proveedores","nombre_empresa", tb_proveedorBuscar.Text);
        }
        if (tb_fechaBuscar.Text != string.Empty)
        {
            if (Validar.validarFecha(tb_fechaBuscar.Text))
            {
                buscarFecha(tb_fechaBuscar.Text);
            }
            else
            {
                lb_fechaInvalida.Visible = true;
            }
        }
        if (tb_fechaBuscar.Text.Equals("") && tb_nroFacturaBuscar.Text.Equals("") && tb_proveedorBuscar.Text.Equals(""))
        {
            mostrarTodasDevoluciones();
        }
    } 
    protected void ib_buscar_Click(object sender, ImageClickEventArgs e)
    {
        buscarOrden();
    }
    protected void ib_cerrarDetalle_Click(object sender, ImageClickEventArgs e)
    {
        fs_detallesOrden.Visible = false;
        fs_buscarOrden.Visible = true;
    }
    protected void gvOrdenDevolucion_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        gv_ordenDevolucion.SelectedIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = gv_ordenDevolucion.SelectedRow;
        int cod_orden = Convert.ToInt32(row.Cells[0].Text);
        if (e.CommandName == "Ver")
        {
            SqlDataSource_DetallesOrdenDevolucion.SelectParameters.Clear();
            SqlDataSource_DetallesOrdenDevolucion.SelectCommand = "SELECT Detalles_Ordenes_Devolucion.nro_renglon, Ordenes_Devolucion.cod_orden_devolucion_compra, Detalles_Ordenes_Devolucion.cod_producto, Productos.nombre as Producto, Marcas.descripcion as Marca, Modelo_Productos.descripcion AS Modelo, Detalles_Ordenes_Devolucion.cantidad as Cantidad, Detalles_Ordenes_Devolucion.importe as Importe, Detalles_Ordenes_Devolucion.cod_motivo, Motivos.descripcion AS Motivo FROM Detalles_Ordenes_Devolucion INNER JOIN Ordenes_Devolucion ON Ordenes_Devolucion.cod_orden_devolucion_compra = Detalles_Ordenes_Devolucion.cod_orden_devolucion_compra INNER JOIN Productos ON Productos.cod_producto = Detalles_Ordenes_Devolucion.cod_producto INNER JOIN Marcas ON Marcas.cod_marca = Productos.cod_marca INNER JOIN Modelo_Productos ON Modelo_Productos.cod_modelo = Productos.cod_modelo INNER JOIN Motivos ON Motivos.cod_motivo = Detalles_Ordenes_Devolucion.cod_motivo WHERE Detalles_Ordenes_Devolucion.cod_orden_devolucion_compra =" + cod_orden ;
            gv_detallesOrdenDevolucion.DataBind();
            fs_buscarOrden.Visible = false;
            fs_detallesOrden.Visible = true;
            div_agregar.Visible = false;
            gv_detallesOrdenDevolucion.Visible = true;
        }
        if (e.CommandName == "Borrar")
        {
            try
            {
                OrdenDevolucion.eliminarOrdenDevolucion(cod_orden);
                Auditoria.guardarEvento(Session["usuario"].ToString(), cod_orden.ToString(), "-", "-", "Ordenes Devolucion", "Codigo de Orden");
                gv_ordenDevolucion.DataBind();
            }
            catch (Exception error)
            {
                lb_error.Text = "No se puede elimiar porque esta siendo usado";
                lb_error.Visible = true;
                error.ToString();
            }
        }

    }
    protected void ib_cancelarBuscar_Click(object sender, ImageClickEventArgs e)
    {
        tb_fechaBuscar.Text = string.Empty;
        tb_nroFacturaBuscar.Text = string.Empty;
        tb_proveedorBuscar.Text = string.Empty;
        mostrarTodasDevoluciones();
    }

    /*Metodos para Agregar Orden de Devolucion*/
    protected void ib_agregar_Click(object sender, ImageClickEventArgs e)
    {
        ib_popUpFactura.Focus();
        div_buscar.Visible = false;
        div_agregar.Visible = true;
    }


    protected void gvDetalles_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        gv_detalles.SelectedIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = gv_detalles.SelectedRow;
        int codPedido = Convert.ToInt32(row.Cells[1].Text);
        if (e.CommandName == "motivo")
        {
            mpe_motivos.Show();
        }
    }
    


    /**********************************************************************************
     *                  Metodo para agregar guardar la orden de devolucion             
     * 
     * *******************************************************************************/
    protected void agregarCabeceraOrdenDevolucion()
    {
        long codFactura = Convert.ToInt64(lb_codFacturaAux.Text);
        long codProveedor = Convert.ToInt64(tb_codProveedorAgregar.Text);

        OrdenDevolucion.agregarOrdenDevolucion(codFactura,codProveedor);
        Auditoria.guardarEvento(Session["usuario"].ToString(), codFactura.ToString(), "-", "-", "Ordenes Devolucion", "Codigo de Factura");
        Auditoria.guardarEvento(Session["usuario"].ToString(), codProveedor.ToString(), "-", "-", "Ordenes Devolucion", "Codigo de Proveedor");
                    


        //Obtener el cod de la orden agregada
        String cadena = (String)ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlConnection conexion = new SqlConnection(cadena);
        SqlCommand ordenDevolucion = new SqlCommand("Select max(cod_orden_devolucion_compra) from Ordenes_Devolucion", conexion);
        try
        {
            conexion.Open();
            ordenDevolucion.Connection = conexion;
            ordenDevolucion.CommandType = CommandType.Text;
            SqlDataReader read1 = ordenDevolucion.ExecuteReader();
            read1.Read();
            string respuesta = read1.GetValue(0).ToString();
            read1.Close();
            tb_codOrdenDevolucionAgregar.Text = respuesta;
        }
        catch (Exception error)
        {
            Response.Write("<SCRIPT language=\"javascript\"> window.alert(\"" + error.Message.ToString() + "\") </SCRIPT>");
        }
        finally
        {
            conexion.Close();
        }
    }//int cod_orden, int cod_motivo, int cod_producto, int cantidad)
    protected void agregarDetallesOrdenDevolucion(long cod_orden, int motivo, long cod_producto, int cantidad)
    {
        OrdenDevolucion.agregarDetallesOrdenDevolucion(cod_orden, motivo, cod_producto, cantidad);
        Auditoria.guardarEvento(Session["usuario"].ToString(), cod_orden.ToString(), "-", "-", "Ordenes Devolucion", "Codigo de Orden");
        Auditoria.guardarEvento(Session["usuario"].ToString(), motivo.ToString(), "-", "-", "Ordenes Devolucion", "Codigo de Motivo");
        Auditoria.guardarEvento(Session["usuario"].ToString(), cod_producto.ToString(), "-", "-", "Ordenes Devolucion", "Codigo de Producto");
        Auditoria.guardarEvento(Session["usuario"].ToString(), cantidad.ToString(), "-", "-", "Ordenes Devolucion", "Cantidad");
    }
    protected void ib_guardarOrdenDevolucion_Click(object sender, ImageClickEventArgs e)
    {
        try
        {
            tb_nroFacturaAgregar.Focus();
            if (tb_codOrdenDevolucionAgregar.Text.Equals(""))
            {
                agregarCabeceraOrdenDevolucion();

            }
            foreach (GridViewRow row in gv_detalles.Rows)
            {

                CheckBox chkbox = (CheckBox)row.FindControl("chb_productos");
                TextBox tbCantidad = (TextBox)row.FindControl("tb_cantidadGv");

                if (tbCantidad.Text.Equals(""))
                {
                    tbCantidad.Text = "0";
                }
                string cant = tbCantidad.Text;

                if (Convert.ToInt32(tbCantidad.Text) > 0)
                {
                    int codMotivo = Convert.ToInt32(lb_motivoAux.Text);
                    long codOrden = Convert.ToInt64(tb_codOrdenDevolucionAgregar.Text);
                    long codFactura = Convert.ToInt64(row.Cells[0].Text);
                    long codProducto = Convert.ToInt64(row.Cells[2].Text);
                    int cantidadRecibida = Convert.ToInt32(row.Cells[7].Text);
                    int cantidad = Convert.ToInt32(cant);
                    rv_cantidad.MaximumValue = row.Cells[7].Text;
                    tb_cantidadAux.Text = cant;
                    Page.Validate("vCantidad");
                    if (Page.IsValid)
                    {
                        agregarDetallesOrdenDevolucion(codOrden, codMotivo, codProducto, cantidad);
                        gv_ordenDevolucion.DataBind();
                        gv_detallesOrdenDevolucion.DataBind();
                        tb_fechaAgregar.Text = string.Empty;
                        //tb_codOrdenDevolucionAgregar.Text = string.Empty;
                        tb_empresaAgregar.Text = string.Empty;
                        limpiarTodo();
                        ib_guardarOrdenDevolucion.Visible = false;
                        ib_cancelarAgregar.Visible = false;
                    }
                }

            }
            Response.Redirect("~/OrdenesDevolucion.aspx");
        }
        catch (Exception error)
        {
            lb_errorSeleccionarProductos.Text = "Completar todos los campos";
            lb_errorSeleccionarProductos.Visible = true;
        }
        
    }
    protected void limpiarTodo()
    {
        //tb_codOrdenDevolucionAgregar.Text = string.Empty;
        tb_codProveedorAgregar.Text = string.Empty;
        tb_fechaAgregar.Text = string.Empty;
        tb_nroFacturaAgregar.Text = string.Empty;
        gv_detalles.Visible = false;
    }

    /**********************************************************
     * 
     *                PopUpFacturas
     **********************************************************/
    protected void ib_popUpFacturaCompra_Click(object sender, ImageClickEventArgs e)
    {
        Page.Validate("campoVacio");
        if (Page.IsValid)
        {
            mostrarGridViewDetallesFacturas();
            mpe_factura.Show();
        }
    }
    protected void mostrarGridViewDetallesFacturas()
    {
        //string nroFactura = tb_nroFacturaAgregar.Text;
        //string codProveedor = tb_codProveedorAgregar.Text;
       
        SqlDataSource_detallesFactura.SelectParameters.Clear();
        SqlDataSource_detallesFactura.SelectCommand = "SELECT Detalles_Facturas_Compras.nro_renglon AS Item, Detalles_Facturas_Compras.cod_factura_compra, Facturas_Compras.nro_factura_compra as Nro_Factura, Facturas_Compras.cod_proveedor, Proveedores.nombre_empresa as Proveedor, Detalles_Facturas_Compras.cod_producto, Productos.nombre AS Producto, Marcas.descripcion AS Marca, Modelo_Productos.descripcion AS Modelo, Detalles_Facturas_Compras.cantidad AS Cantidad FROM Detalles_Facturas_Compras INNER JOIN Facturas_Compras ON Facturas_Compras.cod_factura_compra = Detalles_Facturas_Compras.cod_factura_compra INNER JOIN Productos ON Detalles_Facturas_Compras.cod_producto = Productos.cod_producto INNER JOIN Marcas ON Marcas.cod_marca = Productos.cod_marca INNER JOIN Modelo_Productos ON Productos.cod_modelo = Modelo_Productos.cod_modelo JOIN Proveedores ON Facturas_Compras.cod_proveedor=Proveedores.cod_proveedor ";

        gv_detallesFactura.DataBind();
    }

    //gvDetallesFactura_RowCommand
    protected void gvDetallesFactura_RowCommand(object sender, GridViewCommandEventArgs e)
    {

        gv_detallesFactura.SelectedIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = gv_detallesFactura.SelectedRow;
        
        string cod_factura = row.Cells[1].Text;
        string nro_factura = row.Cells[2].Text;
        string cod_proveedor = row.Cells[3].Text;
        string nombre_empresa= row.Cells[4].Text;
        if (e.CommandName == "agregar")
        {
            lb_codFacturaAux.Text = cod_factura;
            tb_empresaAgregar.Text = nombre_empresa;
            lb_codFactura.Text = cod_factura;
            tb_codProveedorAgregar.Text = cod_proveedor;
            tb_nroFacturaAgregar.Text = nro_factura;
        }
        else
        {
            mpe_factura.Show();
        }
        //aca se muestran los detalles de la fatura
        int nrofactura = Convert.ToInt32(tb_nroFacturaAgregar.Text);
        int codProveedor = Convert.ToInt32(tb_codProveedorAgregar.Text);
        SqlDataSource_Detalles.SelectParameters.Clear();
        SqlDataSource_Detalles.SelectCommand = "SELECT Facturas_Compras.cod_factura_compra, Facturas_Compras.nro_factura_compra as Nro_Factura, Detalles_Facturas_Compras.cod_producto, Productos.nombre AS Producto, Marcas.descripcion AS Marca, Modelo_Productos.descripcion AS Modelo, Detalles_Facturas_Compras.costo_unitario AS Costo, Detalles_Facturas_Compras.cantidad AS Cantidad FROM Facturas_Compras INNER JOIN Detalles_Facturas_Compras ON Detalles_Facturas_Compras.cod_factura_compra = Facturas_Compras.cod_factura_compra INNER JOIN Productos ON Detalles_Facturas_Compras.cod_producto = Productos.cod_producto INNER JOIN Marcas ON Marcas.cod_marca = Productos.cod_marca INNER JOIN Modelo_Productos ON Modelo_Productos.cod_modelo = Productos.cod_modelo where Facturas_Compras.nro_factura_compra = "+nro_factura+" and Facturas_Compras.cod_proveedor= "+cod_proveedor ;
        gv_detalles.DataBind();
        gv_detalles.Visible = true;
        ib_cancelarAgregar.Visible = true;
        ib_guardarOrdenDevolucion.Visible = true;
        mpe_factura.Hide();
    }
    //metodo para que se vean los detalles de la factura y asi poder marcar el qeu se va a devolver
    protected void ib_agregarDetalleDevolucion_Click(object sender, ImageClickEventArgs e)
    {
        //int nro_factura= Convert.ToInt32(tb_nroFacturaAgregar.Text);
        //int codProveedor = Convert.ToInt32(tb_codProveedorAgregar.Text);
        //SqlDataSource_Detalles.SelectParameters.Clear();
        //SqlDataSource_Detalles.SelectCommand = "SELECT Facturas_Compras.cod_factura_compra, Facturas_Compras.nro_factura_compra as Nro_Factura, Detalles_Facturas_Compras.cod_producto, Productos.nombre AS Producto, Marcas.descripcion AS Marca, Modelo_Productos.descripcion AS Modelo, Detalles_Facturas_Compras.costo_unitario AS Costo, Detalles_Facturas_Compras.cantidad AS Cantidad FROM Facturas_Compras INNER JOIN Detalles_Facturas_Compras ON Detalles_Facturas_Compras.cod_factura_compra = Facturas_Compras.cod_factura_compra INNER JOIN Productos ON Detalles_Facturas_Compras.cod_producto = Productos.cod_producto INNER JOIN Marcas ON Marcas.cod_marca = Productos.cod_marca INNER JOIN Modelo_Productos ON Modelo_Productos.cod_modelo = Productos.cod_modelo WHERE Facturas_Compras.nro_factura_compra = " + nro_factura + " AND Facturas_Compras.cod_proveedor = "+codProveedor ;
        //gv_detalles.DataBind();
        //gv_detalles.Visible = true;
    }
    /*******************************************************
     *                  PopUpMotivos
     *****************************************************/
    protected void gvMotivos_RowCommand(object sender, GridViewCommandEventArgs e)
    {

        gv_motivos.SelectedIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = gv_motivos.SelectedRow;
        string cod_motivo = row.Cells[0].Text;
        string descripcion = row.Cells[1].Text;
        if (e.CommandName == "agregarMotivo")
        {
            foreach (GridViewRow row1 in gv_detalles.Rows)
            {
                if (row1 == gv_detalles.SelectedRow)
                {
                    TextBox tbMotivo = (TextBox)row1.FindControl("tb_motivoGv");
                    tbMotivo.Text = descripcion;
                    lb_motivoAux.Text = cod_motivo;
                }
            }
        }
        mpe_motivos.Hide();

    }
    protected void ib_cancelarAgregar_Click(object sender, ImageClickEventArgs e)
    {


        if (tb_codOrdenDevolucionAgregar.Text.Equals(""))
        {
            limpiarTodo();
            Response.Redirect("~/OrdenesDevolucion.aspx");
        }
        else
        {
            int codOrden = Convert.ToInt32(tb_codOrdenDevolucionAgregar.Text);
            OrdenDevolucion.eliminarOrdenDevolucion(codOrden);
            tb_codOrdenDevolucionAgregar.Text = string.Empty;
            Response.Redirect("~/OrdenesDevolucion.aspx");
        }
       
        
    }
    protected void ib_cancelarBuscarMotivo_Click(object sender, ImageClickEventArgs e)
    {
        tb_motivoPopUp.Text = string.Empty;
        mpe_motivos.Hide();
        gv_motivos.DataBind();
    }
    protected void ib_buscarMotivo_Click(object sender, ImageClickEventArgs e)
    {
        
        SqlDataSource_Motivo.SelectParameters.Clear();
        SqlDataSource_Motivo.SelectCommand = "Select cod_motivo AS Codigo, descripcion as Motivo from Motivos WHERE descripcion like '"+tb_motivoPopUp.Text+"%'";
        SqlDataSource_Motivo.SelectParameters.Add("descripcion", TypeCode.String, "%");
        SqlDataSource_Motivo.SelectParameters["descripcion"].DefaultValue = tb_motivoPopUp.Text;
        gv_motivos.DataBind();
        mpe_motivos.Show();
    }
    protected void tb_codProveedorAgregar_TextChanged(object sender, EventArgs e)
    {
        ib_popUpFactura.Focus();
    }
    protected void tb_nroFacturaAgregar_TextChanged(object sender, EventArgs e)
    {
        tb_codProveedorAgregar.Focus();
    }
    protected void ib_reporteBuscar_Click(object sender, ImageClickEventArgs e)
    {
        Response.Redirect("~/ReporteOrdenesDevolucion.aspx");
    }
}
